package com.ztl.leetcode.SwordFingerOffer;

/**
 * @author @ztl
 * @ClassName:ListInversionPrint_06
 * @Package:com.ztl.leetcode.SwordFingerOffer
 * @date 2023年05月12日 20:58
 * @description: 输入一个链表的头节点，从尾到头反过来返回每个节点的值（用数组返回）。
 * @version: 1.0
 */
public class ListInversionPrint_06 {

    //将返回结果提升作用域
    int[] res;
    //变量i用来定义res[]长度
    int i = 0;
    //变量j用来定义递归获取值存放的位置
    int j = 0;

    //递归遍历链表N次，时间复杂度O(n);使用了栈空间，空间复杂度O(n)
    public int[] reversePrint(ListNode head) {
        //使用递归的特性，ListNode倒序存储
        recur(head);
        return res;
    }

    //定义递归方法，将头节点传入参数
    public void recur(ListNode head){
        //递归终止条件：当前节点为null时，则终止递归
        if(head == null){
            //初始化res
            res = new int[i];
            return;
        }
        //累加递归次数i，作为返回结果res[]的长度
        i++;
        //递归开始
        recur(head.next);

        //递归返回时，开始按顺序为res[]赋值
        res[j] = head.val;
        j++;
    }
}
